package com.fy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fy.pojo.dto.admin.AdminLoadUserListDTO;
import com.fy.pojo.entity.User;
import com.fy.pojo.vo.activity.ActiveUserVO;
import com.fy.pojo.vo.other.CheckInVO;
import com.fy.pojo.vo.user.LoginUserVO;
import com.fy.pojo.vo.user.UserInfoVO;
import com.fy.pojo.vo.user.UserSpaceVO;
import com.fy.utils.result.PageResult;
import com.fy.utils.result.Result;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface UserService extends IService<User> {

    /***
     * 邮箱验证码发送
     *
     * @param email
     */
    void sendEmailCheckCode(String email);

    /***
     * 注册
     *
     * @param email
     * @param emailCode
     * @param username
     * @param password
     */
    void register(HttpServletRequest request, String email, String emailCode, String username, String password);

    /**
     * 用户登录
     *
     * @param request  请求对象
     * @param email    邮箱(可选)
     * @param username 用户名(可选)
     * @param password 密码
     * @return 登录用户信息
     */
    LoginUserVO login(HttpServletRequest request, String email, String username, String password);

    /**
     * 修改密码
     *
     * @param userName
     * @param password
     */
    void updatePassword(String userName, String password);

    /**
     * 重置密码
     *
     * @param email
     * @param newPassword
     */
    void resetPwd(String email, String emailCode, String newPassword);

    /**
     * 获取用户空间
     *
     * @param nickName
     * @return
     */
    UserSpaceVO getUserSpace(String nickName);

    /**
     * 更新头像
     *
     * @param userEmail
     * @param avatar
     */
    String updateAvatarPath(String userEmail, MultipartFile avatar);

    /**
     * 获取用户头像
     *
     * @param userEmail
     * @return
     */
    String getAvatar(String userEmail);

    /**
     * 退出登录更新登陆状态
     *
     * @param username
     */
    void logout(String username);

    /**
     * 管理员获取用户列表
     *
     * @param adminLoadUserListDTO
     * @return
     */
    PageResult loadUserList(AdminLoadUserListDTO adminLoadUserListDTO);

    /**
     * 注销账号
     *
     * @param loginUserVO
     */
    void destroy(LoginUserVO loginUserVO);

    /**
     * 用户签到
     * 
     * @param userId 用户ID
     * @return 签到结果
     */
    Result checkIn(Integer userId);

    /**
     * 获取用户签到信息
     * 
     * @param userId 用户ID
     * @return 签到信息
     */
    Result<CheckInVO> getDailyCheck(Integer userId);

    /**
     * 获取活跃用户排行
     * 
     * @return 活跃用户列表
     */
    Result<List<ActiveUserVO>> getActiveUsers();

    Result getUserProfile(Integer userId);

    void updateSpacePermission(Long userId, Boolean spaceEnabled);

    /**
     * 更新用户信息
     *
     * @param userId      用户ID
     * @param username    用户名
     * @param password    密码
     * @param description 个性描述
     * @return
     */
    UserInfoVO updateUserInfo(Long userId, String username, String password, String description);

}
